import axios from "axios"

// 创建axios实例
const request = axios.create({
    timeout: 10000,
    headers: {
        'Content-Type': 'application/json',
    }
})

// 请求拦截器
request.interceptors.request.use(
    (config) => {
        // 在发送请求之前做些什么
        console.log('发送请求:', config)
        
        // 可以在这里添加认证token等
        // const token = localStorage.getItem('token')
        // if (token) {
        //     config.headers.Authorization = `Bearer ${token}`
        // }
        
        return config
    },
    (error) => {
        // 对请求错误做些什么
        console.error('请求错误:', error)
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    (response) => {
        // 对响应数据做点什么
        console.log('收到响应:', response)
        
        // 检查响应数据是否存在
        if (!response.data) {
            const error = new Error('响应数据为空')
            error.name = 'BusinessError'
            throw error
        }
        
        // 根据后端约定的结构解析数据
        // 假设后端返回的数据结构为 { code: number, message: string, data: any }
        const { code, data, message } = response.data
        
        // 根据业务代码处理
        if (code === 200) {
            // 成功
            return data
        } else {
            // 业务错误
            const error = new Error(message || '请求失败')
            error.name = 'BusinessError'
            throw error
        }
    },
    (error) => {
        // 对响应错误做点什么
        console.error('响应错误:', error)
        
        // 处理HTTP错误状态码
        if (error.response) {
            const { status } = error.response
            switch (status) {
                case 400:
                    error.message = '请求参数错误'
                    break
                case 401:
                    error.message = '未授权，请重新登录'
                    // 可以在这里处理登录过期逻辑
                    // redirectToLogin()
                    break
                case 403:
                    error.message = '拒绝访问'
                    break
                case 404:
                    error.message = '请求资源不存在'
                    break
                case 500:
                    error.message = '服务器内部错误'
                    break
                case 502:
                    error.message = '网关错误'
                    break
                case 503:
                    error.message = '服务不可用'
                    break
                case 504:
                    error.message = '网关超时'
                    break
                default:
                    error.message = `连接错误${status}`
            }
        } else if (error.request) {
            // 请求已发出但没有收到响应
            error.message = '网络错误，请检查网络连接'
        } else {
            // 其他错误
            error.message = error.message || '未知错误'
        }
        
        return Promise.reject(error)
    }
)

export default request